package com.yuw.hw20190416.test01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class StudentMaster {

	// 属性
	// 学生信息集合对象
	private List arrStus;

	// 行为

	public StudentMaster() {
		super();
		// 调用初始化方法
		init();
	}

	public void showScore() {
		// 初始化
		// init();

		// 排序
		bubbleSort();

		// 打印信息
		printArr();
	}

	// 数据录入行为
	private void init() {
		// 准备数据
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入班级学生人数：");
		// 学生人数
		int count = sc.nextInt();
		// 根据学生人数创建学生数组
		// 此处初始化的是成员变量，而不是局部变量
		arrStus = new ArrayList(count);
		// 添加数据(可以控制台输入)
		for (int i = 0; i < count; i++) {
			// 输入参数
			System.out.println("请输入第" + (i + 1) + "个学生的姓名：");
			String strName = sc.next();
			System.out.println("请输入第" + (i + 1) + "个学生的学号：");
			String strNum = sc.next();
			System.out.println("请输入第" + (i + 1) + "个学生的成绩：");
			double fScore = sc.nextDouble();
			// 根据输入的参数，构建一个学生对象实例
			Student stu = new Student(strName, strNum, fScore);
			// 把创建的学生对象，放到学生数组中
			arrStus.add(stu);
		}
	}

	// 排序行为
	/**
	 * 冒泡排序算法[从小到大]--优化
	 * 
	 * @param arrStus 被排序的数组
	 */
	public void bubbleSort() {

		// 提供Student比较器
		Collections.sort(arrStus, new Comparator<Student>() {
			@Override
			public int compare(Student o1, Student o2) {
				// 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象，则分别返回负整数、零或正整数。
				// 默认返回值(相等)
				int i_re = 0;
				// 临时变量
				Student stu0, stu1;
				// 学生排序的比较（按成绩排序）
				if (o1 == null || o2 == null) {
					// 业务：有一个为null则返回0
					i_re = 0;
				} else if ((stu0 = (Student) o1).getStuScore() > ((stu1 = (Student) o2)).getStuScore()) {
					String stuName = stu0.getStuName();
					// 大于情况
					i_re = 1;
				} else if ((stu0 = (Student) o1).getStuScore() < ((stu1 = (Student) o2)).getStuScore()) {
					// 小于情况
					i_re = -1;
				}
				return i_re * -1;
			}
		});
	}

	// 学生信息输出行为
	/**
	 * 打印数组
	 * 
	 * @param arr
	 */
	public void printArr() {
		for (Object i : arrStus) {
			((Student) i).printMe();
		}
		// 换行
		System.out.println();
	}
}
